// 导入vuex
import store from './store/index'
// 导入路由
import router from './router/index.js'
// 导入动态路由数据
import { asyncRoutes } from '@/router'
// 导入进度条插件
import nprogress from 'nprogress'
// 引入进度条样式
import 'nprogress/nprogress.css'

// 白名单
let whiteList = ['/login', '/404']
// 路由前置导航守卫
router.beforeEach(async (to, from, next) => {
  // 开启进度条
  nprogress.start()
  // 判断有没有token 有token的话  代表已经登录
  // 然后再判断是不是去登录页 如果已经登录还去登录页的话 就让他跳转到首页
  if (store.getters.token) {
    //  有token  已经登录了
    if (to.path == '/login') {
      // 如果已经登录了 还去登录页面的话  就跳转到首页
      next('/')
    } else {
      // 如果没有用户信息再去发请求
      if (!store.getters.userId) {
        // 通过vuex actions来发送请求
        let userInfo = await store.dispatch('user/getUserInfo')
        //  动态路由
        // console.log(userInfo.roles.menus)
        //  过滤所有的动态路由，只过滤出name在 menus 里的路由
        let routes = await store.dispatch(
          'permission/getRoutes',
          userInfo.roles.menus
        )

        // console.log(routes)
        // // 添加到路由规则
        router.addRoutes(routes)

        //  下次跳转到页面  就不会出现刷新之后 显示空白页的问题
        next(to.path)
      }
      // 如果不是去登录页 正常跳转
      next()
    }
  } else {
    if (whiteList.includes(to.path)) {
      next()
    } else {
      //   没有token  证明没有登录 跳转到登录页
      next('/login')
    }
  }
  nprogress.done() // 关闭进度条 解决手动切换地址时进度条不关闭的问题
})
// 路由后置导航守卫
router.afterEach((to, from) => {
  // 关闭进度条
  nprogress.done()
})
